package com.xcity.game.combat.unit;

import java.util.Collections;
import java.util.List;

import com.alibaba.fastjson.annotation.JSONField;
import com.xcity.game.combat.attr.CombatAttributeType;
import com.xcity.game.skill.Skill;

public interface CombatableBase extends Combatable {

	@JSONField(serialize = false)
	@Override
	default float getAttackPower() {
		return getAttributeValue(CombatAttributeType.ATTACK_POWER);
	}

	@JSONField(serialize = false)
	@Override
	default float getMagicPower() {
		return getAttributeValue(CombatAttributeType.MAGIC_POWER);
	}

	@JSONField(serialize = false)
	@Override
	default float getDefense() {
		return getAttributeValue(CombatAttributeType.DEFENSE);
	}

	@JSONField(serialize = false)
	@Override
	default float getMagicDefense() {
		return getAttributeValue(CombatAttributeType.MAGIC_DEFENSE);
	}

	@JSONField(serialize = false)
	@Override
	default float getCrit() {
		return getAttributeValue(CombatAttributeType.CRIT);
	}
	
	@JSONField(serialize = false)
	@Override
	default float getAvoidCrit() {
		return getAttributeValue(CombatAttributeType.AVOID_CRIT);
	}

	@JSONField(serialize = false)
	@Override
	default int getHp() {
		return (int) getAttributeValue(CombatAttributeType.HP);
	}

	@JSONField(serialize = false)
	@Override
	default int getMaxHp() {
		return (int) getAttributeValue(CombatAttributeType.MAX_HP);
	}

	@JSONField(serialize = false)
	@Override
	default int getMp() {
		return (int) getAttributeValue(CombatAttributeType.MP);
	}

	@JSONField(serialize = false)
	@Override
	default int getMaxMp() {
		return (int) getAttributeValue(CombatAttributeType.MAX_MP);
	}

	@JSONField(serialize = false)
	@Override
	default int getAttackSpeed() {
		return (int) getAttributeValue(CombatAttributeType.ATTACK_SPEED);
	}

	@JSONField(serialize = false)
	@Override
	default float getCritDamage() {
		return getAttributeValue(CombatAttributeType.CRIT_DAMAGE);
	}

	@JSONField(serialize = false)
	@Override
	default float getDodge() {
		return getAttributeValue(CombatAttributeType.DODGE);
	}

	@JSONField(serialize = false)
	@Override
	default float getResist() {
		return getAttributeValue(CombatAttributeType.RESIST);
	}

	@JSONField(serialize = false)
	@Override
	default float getHitRate() {
		return getAttributeValue(CombatAttributeType.HIT_RATE);
	}

	@JSONField(serialize = false)
	@Override
	default float getMagicHitRate() {
		return getAttributeValue(CombatAttributeType.MAGIC_HIT_RATE);
	}
	
	@JSONField(serialize = false)
	@Override
	default List<? extends Skill> getSkills() {
		return Collections.emptyList();
	}
	
	@Override
	default void setId(long id) {
	}

	@Override
	default void setSex(byte sex) {
	}

	@Override
	default void setName(String name) {
	}

	@Override
	default void setIcon(String icon) {
	}

	@Override
	default void setLevel(int level) {
	}
	
	@JSONField(serialize = false)
	default int getCombatPower() {
		return 0;
	}

	float getAttributeValue(CombatAttributeType type);
	float setAttributeValue(CombatAttributeType type, float value);
	
}
